package com.central.apps.service;

import com.central.apps.entity.MpxjBean;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * 任务接口类
 *
 * @author 李大超
 * @date 2023/3/11
 */
public interface TaskService {

    /**
     * 更新任务记录id
     *
     * @param proId
     */
    void updateRecordId(Integer proId) throws Exception;

    /**
     * 更新任务父级id
     *
     * @param proId
     */
    void updParentId(Integer proId) throws Exception;

    /**
     * 更新任务前置
     *
     * @param proId
     */
    void updPredecessors(Integer proId) throws Exception;

    /**
     * 删除任务
     *
     * @param proId
     * @param taskId
     */
    String delTask(Integer proId, Integer taskId) throws Exception;

    /**
     * 查看任务
     *
     * @param proId
     * @param taskId
     */
    Map<String, Object> viewTask(Integer proId, Integer taskId) throws Exception;

    /**
     * 查看年度计划
     *
     * @param proId
     */
    MpxjBean viewPlan(Integer proId) throws Exception;

    /**
     * 修改年度计划
     *
     * @param mpxjBean
     * @param proId
     */
    MpxjBean modifyPlan(MpxjBean mpxjBean, Integer proId) throws Exception;

    /**
     * 导入计划
     *
     * @param file
     * @param proId
     */
    String importPlan(MultipartFile file, Integer proId) throws Exception;

    /**
     * 导出计划
     *
     * @param proId
     */
    String exportPlan(Integer proId) throws Exception;

    /**
     * 查看里程碑计划
     *
     * @param proId
     */
    MpxjBean viewBaseLine(Integer proId) throws Exception;

    /**
     * 校验里程碑数据
     *
     * @param proId
     * @param mpxjBean
     */
    String judgeMilestone(Integer proId, MpxjBean mpxjBean) throws Exception;

    /**
     * 变更任务插入新任务
     *
     * @param relateMap 新旧任务对应关系集合
     * @param toTableName 被更任务表名
     * @param taskIdFieldName 关联任务id字段名称
     * @param taskList 任务数据信息
     * @param setValues 手工赋值集合
     * @param filterFields 转换数据过滤字段信息
     * @param isUpdate 是否更新任务信息
     * @param fromTableName 更新任务表名
     * @param isFilterTempTask 是否过滤临时任务
     * @param filterFiledName 过滤字段名称
     * @throws Exception
     */
    void insertChgInfo(Map<Integer, Integer> relateMap, String toTableName, String taskIdFieldName, List<Map<String, Object>> taskList,
                    Map<String, Object> setValues, List<String> filterFields, boolean isUpdate, String fromTableName,
                          boolean isFilterTempTask, String filterFiledName, boolean isFilterParent, String parentFieldName) throws Exception;

    /**
     *
     *
     * @param relateMap 新旧任务对应关系集合
     * @param relateConvertMap 新旧任务转换对应关系集合
     * @param fromTaskList 来源任务数据信息
     * @param toTaskList 目标任务数据信息
     * @param filterFields 转换数据过滤字段信息
     * @param toTaskTableName 目标任务表名
     * @param isUpdMilestone 是否更新里程碑
     * @param fromTaskIdFieldName 来源任务id字段名称
     * @param expFields 过滤字段集合
     * @throws Exception
     */
    void updateDeleteChgInfo(Map<Integer, Integer> relateMap, Map<String, String> relateConvertMap, List<Map<String, Object>> fromTaskList, List<Map<String, Object>> toTaskList,
                          List<String> filterFields, String toTaskTableName, boolean isUpdMilestone, String fromTaskIdFieldName, List<String> expFields,
                             boolean isFilterParent, String parentFieldName) throws Exception;

    /**
     * 更新任务信息
     *
     * @param tableName 表名
     * @param queryConditon 查询条件
     */
    void updateTaskInfo(String tableName, String queryConditon, String levelFieldName) throws Exception;

    /**
     * 更新任务记录id
     *
     * @param tableName 表名
     * @param queryConditon 查询条件
     */
    void updateRecordId(String tableName, String queryConditon) throws Exception;

    /**
     * 更新任务父级id
     *
     * @param tableName 表名
     * @param queryConditon 查询条件
     */
    void updParentId(String tableName, String queryConditon, String levelFieldName) throws Exception;

    /**
     * 更新任务前置
     *
     * @param tableName 表名
     * @param queryConditon 查询条件
     */
    void updPredecessors(String tableName, String queryConditon) throws Exception;

    /**
     * 初始化变更任务->更新任务父级和前置
     *
     * @param app 应用名称
     * @param tableName 表名
     * @param queryConditon 查询条件
     */
    void updParentIdAndPredecessors(String app, String tableName, String queryConditon) throws Exception;

    /**
     * 处理变更信息->显示的展示WBS变化数据
     *
     * @param app 应用名称
     * @param chgFieldName 变更id字段名称
     * @param chgId 变更id
     * @param fromTableName1 变更表名
     * @param fromTaskIdFieldName1 变更任务id字段名称
     * @param fromTableName2 被变更表名
     * @param toUpdTableName 变更结果表名
     * @param toNewTableName 新建结果表名
     * @param toDelTableName 删除结果表名
     * @param convertMap 转换集合
     */
    void dealChgInfo(String app, String chgFieldName, Integer chgId, String fromTableName1, String fromTaskIdFieldName1, String fromTableName2, String toUpdTableName,
                     String toNewTableName, String toDelTableName, List<Map<String, Object>> fromTaskList, List<Map<String, Object>> toTaskList,
                     Map<String, List<String>> convertMap, List<String> expFields) throws Exception;

    /**
     * 复制计划到我的任务
     *
     * @param proId
     * @throws Exception
     */
    void copyToMyTask(Integer proId) throws Exception;

    /**
     *
     * @param app 应用名称
     * @param condition 查询条件
     * @param relateIdFieldName 关联id字段名称
     * @param newTableName 交付物变更新建表名
     * @param updTableName 交付物变更变更表名
     * @param delTableName 交付物变更删除表名
     * @param deliTableName 交付物目标表名
     * @param setValues 手工赋值集合
     * @param expFields 过滤字段集合
     * @param convertMap 转换集合
     * @throws Exception
     */
    void dealDeliverables(String app, String condition, String relateIdFieldName, String newTableName, String updTableName, String delTableName, String deliTableName,
                          Map<String, Object> setValues, List<String> expFields, Map<String, List<String>> convertMap) throws Exception;
}
